package jp.co.toshiba.ffsa.action.csde;

import java.util.ArrayList;

import javax.annotation.Resource;

import jp.co.toshiba.ffsa.action.common.CommonAction;
import jp.co.toshiba.ffsa.dto.LoginDto;
import jp.co.toshiba.ffsa.form.csde.Csde201Form;
import jp.co.toshiba.ffsa.service.common.ConstantValue;
import jp.co.toshiba.ffsa.service.csde.Csde201Service;

import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.MessageResourcesUtil;
import org.seasar.struts.util.RequestUtil;

/**
 * 設計I/F - 同意画面
 * @author npc
 */
public class Csde201Action extends CommonAction {

    /** 画面ID */
    public String screenID = "CSDE201";

    /** アクションフォーム */
    @ActionForm
    @Resource
    protected Csde201Form csde201Form;

    @Resource
    protected Csde201Service csde201Service;

    /**
     * 初期処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String index() throws Exception {
        // ログイン済判定する
        if(this.judgeLogin(csde201Form.getSessionId())){
            try {
                // リファラ判定
                if(this.judgeRefferer()){
                    return "/csde/csde201.jsp";
                }else{
                    return this.topTransition;
                }
            } catch (Exception e) {
                this.errorLogWriter(e, "index", this.screenID);
                throw e;
            }
        }else{
            return this.topTransition;
        }
    }

    /**
     * 確認処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = true,input="/csde/csde201/error")
    public String agreeUs() throws Exception {
        // ログイン済判定する
        if(this.judgeLogin(csde201Form.getSessionId())){
            try {
                // リファラ判定
                if(this.judgeRefferer()){
                    // セッションタイムアウト判定
                    if(this.judgeSession()){
                        // ユーザーテーブル更新処理
                        csde201Service.setUserID(((LoginDto)RequestUtil.getRequest().getSession().getAttribute("login_dto")).getUserID());
                        csde201Service.updateUserInfo();
                        // セッション更新
                        this.setSession();
                        // 操作ログ記述
                        String result = "";
                        result = ConstantValue.success;
                        ArrayList<ArrayList<String>> parameters = new ArrayList<ArrayList<String>>();
                        ArrayList<String> parameterNames = new ArrayList<String>();
                        ArrayList<String> values = new ArrayList<String>();
                        parameterNames.add(MessageResourcesUtil.getMessage("agree"));
                        values.add(this.csde201Form.agree);
                        parameters.add(parameterNames);
                        parameters.add(values);
                        this.entryOperationHistory(this.screenID, "submit", parameters, result);
                        return "/csde/csde202";
                    }else{
                        return this.topTransition;
                    }
                }else{
                    return this.topTransition;
                }
            }catch(Exception e) {
                this.errorLogWriter(e, "agreeUs", this.screenID);
                throw e;
            }
        }else{
            return this.topTransition;
        }
    }

    /**
     * セッション更新処理
     * @throws Exception
     */
    @Execute(validator = false)
    private void setSession() throws Exception {
        LoginDto dto = new LoginDto();
        dto.setUserID(((LoginDto)RequestUtil.getRequest().getSession().getAttribute("login_dto")).getUserID());
        dto.setAuthority(((LoginDto)RequestUtil.getRequest().getSession().getAttribute("login_dto")).getAuthority());
        dto.setAgreementFlag("1");
        RequestUtil.getRequest().getSession().setAttribute("login_dto", dto);
    }

    /**
     * バリデーションエラー処理
     * @return 遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String error() throws Exception {
        // ログイン済判定する
        if(this.judgeLogin(csde201Form.getSessionId())){
            try {
                // リファラ判定
                if(this.judgeRefferer()){
                    // セッションタイムアウト判定
                    if(this.judgeSession()){
                        return index();
                    }else{
                        return this.topTransition;
                    }
                }else{
                    return this.topTransition;
                }
            }catch(Exception e) {
                this.errorLogWriter(e, "agreeUs", this.screenID);
                throw e;
            }
        }else{
            return this.topTransition;
        }
    }
}